package main.java;

/**
 * @program: pratice
 * @author: 关键我是大怪
 * @create: 2021-10-31 20:04
 */

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 题目：
 * 给你一个字符串数组 words ，只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
 * <p>
 * 美式键盘中：
 * 第一行由字符 "qwertyuiop" 组成。
 * 第二行由字符 "asdfghjkl" 组成。
 * 第三行由字符 "zxcvbnm" 组成。
 * <p>
 * 示例：
 * 输入：words = ["Hello","Alaska","Dad","Peace"]
 * 输出：["Alaska","Dad"]
 */

public class Test66_键盘行 {
    static String line1 = "qwertyuiopQWERTYUIOP";
    static String line2 = "asdfghjklASDFGHJKL";
    static String line3 = "zxcvbnmZXCVBNM";
    static Map<Character, Integer> map;

    static {
        map = new HashMap<>();
        for (char c : line1.toCharArray()) {
            map.put(c, 1);
        }
        for (char c : line2.toCharArray()) {
            map.put(c, 2);
        }
        for (char c : line3.toCharArray()) {
            map.put(c, 3);
        }
    }

    // w:   循环标签
    public String[] findWords(String[] words) {
        List<String> ans = new ArrayList<>();
        w:
        for (String str : words) {
            int index = map.get(str.charAt(0));
            for (char c : str.toCharArray()) {
                if (map.get(c) != index) {
                    continue w;
                }
            }
            ans.add(str);
        }
        return ans.toArray(new String[]{});
    }
}
